# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/3/27 10:15'

# 算法是核心，数据和计算是基础
# 大部分复杂模型的算法设计都是算法工程师在做，而我们
#
# 	分析很多的数据
# 	分析具体的业务
# 	应用常见的算法
# 	特征工程、调参数、优化

"""
数据拆分、sklearn 下 载数据

加载获取流行数据集（获取小规模数据集，数据包含在datasets里）
load*和fetch*返回的数据类型datasets.base.Bunch (字典格式)

data：特征数据数组，是 [n_samples * n_features] 的二维
	          numpy.ndarray 数组

target：标签数组，是 n_samples 的一维 numpy.ndarray 数组

DESCR：数据描述

feature_names：特征名,新闻数据，手写数字、回归数据集没有

target_names：标签名,回归数据集没有

load
datasets.load_*()
获取大规模数据集，需要从网络上下载，函数的第一个参数是data_home，表示数据集下载的目录，默认是 ~/scikit_learn_data/
datasets.fetch_*()


"""

# 训练集与测试机拆分
from sklearn.model_selection import train_test_split

from sklearn import datasets

def load():
	ds = datasets.load_iris()
	print(dir(ds))
	print("数据路径：", ds.filename)
	print("---------------------------------------")
	print("数据：", ds.data)
	print("数据形状：", ds.data.shape)
	print("特征名称：", ds.feature_names)
	print("---------------------------------------")
	print("目标值(标签数组)：", ds.target)
	print("目标名称(类别/标签)：", ds.target_names)
	print("---------------------------------------")
	# x 数据集的特征值、 y 数据集的目标值
	# random_state
	# 	随机数种子, 不同的种子会造成不同的随机
	# 	采样结果。相同的种子采样结果相同。
	# 注意返回值, 训练集 train  x_train, y_train        测试集  test   x_test, y_test
	x_train, x_test, y_train, y_test = train_test_split(ds.data, ds.target, test_size=0.1, random_state=1)
	print("训练集特征值和目标值：", x_train, y_train)
	print("测试集特征值和目标值：", x_test, y_test)
	return None


# 下载新闻数据
# sklearn.datasets.fetch_20newsgroups(data_home=None, subset=‘train’)
# subset: 'train'
# 或者
# 'test', 'all'，可选，选择要加载的数据集.
# 训练集的“训练”，测试集的“测试”，两者的“全部”
# datasets.clear_data_home(data_home=None)
#   清除目录下的数据
def fetch():
	ds = datasets.fetch_20newsgroups(data_home=None, subset='all')
	print(dir(ds))
	print("---------------------------------------")
	# print("数据：", ds.data)
	print("文件路径：", ds.filenames)
	print("---------------------------------------")
	print("目标值(标签数组)：", ds.target)
	print("目标名称(类别/标签)：", ds.target_names)
	print("---------------------------------------")
	return None


# fit_transform():输⼊数据直接转换,转换后的数据范围变小了。
#   fit_transform = fit + transform
# fit():输⼊入数据，但不不做事情
# + transform(): 进⾏行行数据的转换
# [[23,34,5],[20,19,45]] 计算平均值，⽅方差等等
# [[23,34,5],[20,19,45]]


if __name__ == "__main__":
	load()
	print("======================================")
	fetch()
